package com.hz.erp.service;

import com.hz.erp.constant.RetResult;
import com.hz.erp.entity.dto.UserDto;
import com.hz.erp.entity.page.PageRequest;
import com.hz.erp.entity.page.PageResult;
import com.hz.erp.entity.vo.UserVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author 柯鑫
 * @ClassName com.hz.erp.service.UserService
 * @description 用户类接口服务
 * @create 2020年06月04日 15:57
 */
public interface UserService {

    /**
     * 根据id查询User对象
     * @param id
     * @return
     */
    RetResult<UserVo> selectUserById(Long id);

    /**
     * 根据条件查询所有的用户信息
     * @return
     */
    RetResult<List<UserDto>> selectUserAll(UserVo user);


    /**
     *
     * 分页查询接口
     * 这里统一封装了分页请求和结果，避免直接引入具体框架的分页对象, 如MyBatis或JPA的分页对象
     * 从而避免因为替换ORM框架而导致服务层、控制层的分页接口也需要变动的情况，替换ORM框架也不会
     * 影响服务层以上的分页接口，起到了解耦的作用
     * @param pageRequest 自定义，统一分页查询请求
     * @return PageResult 自定义，统一分页查询结果
     * @return
     */
    RetResult<PageResult> findUserListPage(PageRequest pageRequest, UserVo user);

    /**
     * 注册User对象
     * @param user
     * @return
     */
    RetResult<String> registerUserOne(UserVo user, String way, HttpServletRequest request);

    /**
     * 根据账户检查用户是否存在
     * @param loginName
     * @return
     */
    RetResult<String> selectUserByName(String loginName);


    /**
     * 登录，通过用户名账号和密码去查询
     * @param user
     * @return
     */
    RetResult<String> loginSelect(UserVo user, HttpServletRequest request, String way);

    /**
     * 根据id修改密码
     * @return
     */
    RetResult<String> updateUserInfo(UserVo user);

    /**
     * 停用账户
     * @param id
     * @return
     */
    RetResult<String> deleteUserInfo(Long id);

    /**
     * 根据账号修改密码
     * @param userVo
     * @return
     */
    RetResult<String> updateUserByInfo(UserVo userVo, HttpServletRequest request);


}
